

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

using System.Globalization;
using JTC.MiniCommerce.Core;
using JTC.MiniCommerce.Core.Globalization;
using JTC.MiniCommerce.Localization;
using JTC.MiniCommerce.Store;
using SubSonic.Utilities;

namespace JTC.MiniCommerce.Web.admin.controls.sitesettings {
  public partial class globalization : SiteSettingsControl {

    #region Member Variables

    private string view = string.Empty;

    #endregion

    #region Page Events

    /// <summary>
    /// Handles the Load event of the Page control.
    /// </summary>
    /// <param name="sender">The source of the event.</param>
    /// <param name="e">The <see cref="T:System.EventArgs"/> instance containing the event data.</param>
    protected void Page_Load(object sender, EventArgs e) {
      try {
        view = Utility.GetParameter("view");
        if (pnlSettings.Visible) {
          SetGlobalizationSettingsProperties();
          if (!Page.IsPostBack) {
            SetLanguageSelections();
            SetCurrencySelections();
            ddlLanguage.SelectedValue = SiteSettings.Language;
            ddlCurrency.SelectedValue = SiteSettings.CurrencyCode;
          }
        }
      }
      catch (Exception ex) {
        Logger.Error(typeof(globalization).Name + ".Page_Load", ex);
        base.MasterPage.MessageCenter.DisplayCriticalMessage(LocalizationUtility.GetCriticalMessageText(ex.Message));
      }
    }

    /// <summary>
    /// Handles the Click event of the btnSave control.
    /// </summary>
    /// <param name="sender">The source of the event.</param>
    /// <param name="e">The <see cref="T:System.EventArgs"/> instance containing the event data.</param>
    protected void btnSave_Click(object sender, EventArgs e) {
      try {
        SiteSettings.Language = ddlLanguage.SelectedValue;
        SiteSettings.CurrencyCode = ddlCurrency.SelectedValue;
        base.Save(SiteSettings);
      }
      catch (Exception ex) {
        Logger.Error(typeof(browsinglog).Name + ".btnSave_Click", ex);
        base.MasterPage.MessageCenter.DisplayCriticalMessage(LocalizationUtility.GetCriticalMessageText(ex.Message));
      }
    }

    #endregion

    #region Methods

    #region Private

    /// <summary>
    /// Sets the language selections.
    /// </summary>
    private void SetLanguageSelections() {
      CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.SpecificCultures);
      Array.Sort(cultures, new CultureComparer()) ;
      ddlLanguage.DataSource = cultures;
      ddlLanguage.DataValueField = "Name";
      ddlLanguage.DataTextField = "DisplayName";
      ddlLanguage.DataBind();
    }

    /// <summary>
    /// Sets the currency selections.
    /// </summary>
    private void SetCurrencySelections() {
      CurrencyCollection currencyCollection = new CurrencyController().FetchAll().OrderByAsc("Description");
      ddlCurrency.DataSource = currencyCollection;
      ddlCurrency.DataValueField = "Code";
      ddlCurrency.DataTextField = "Description";
      ddlCurrency.DataBind();
    }

    /// <summary>
    /// Sets the globalization settings properties.
    /// </summary>
    private void SetGlobalizationSettingsProperties() {
      this.Page.Title = LocalizationUtility.GetText("titleSiteSettingsGlobalization");
      pnlSettings.GroupingText = LocalizationUtility.GetText("pnlGlobalization");
      LocalizationUtility.AddLabelText(lblLanguage);
      LocalizationUtility.AddLabelText(lblCurrency);
      LocalizationUtility.AddButtonText(btnSave);
      LocalizationUtility.AddHoverHelp(hlCurrencyHelp);
      LocalizationUtility.AddHoverHelp(hlLanguageHelp);
    }

    #endregion

    #endregion

  }
}